#define _CRT_SECURE_NO_WARNINGS
#include "hash.h"

template <class K>
struct FK {
	K& operator()(K key)
	{
		return key;
	}
};

template <class T>
struct HS {
	T& operator()(T X)
	{
		return X;
	}
};



int main()
{
	hash_bucket::HashTable<int, int, FK<int>, HS<int>> he;

	he.Insert(1);
	he.Insert(12);
	he.Insert(123);
	he.Insert(1234);
	he.Insert(4321);
	he.Insert(321);
	he.Insert(21);
	he.Insert(1);
	he.Insert(432);
	he.Insert(43);
	he.Insert(44);
	cout << he.Find(1) << endl;
	cout << he.size() << endl;

	he.Erase(1);
	he.Erase(1234);
	cout << he.Find(1) << endl;
	cout << he.Find(1234) << endl;
	cout << he.size() << endl;
	he.Print();
	hash_bucket::HashTable<int, int, FK<int>, HS<int>> haha(he);
	haha.Print();
	hash_bucket::HashTable<int, int, FK<int>, HS<int>> YL;
	YL.Insert(9);
	YL.Insert(8);
	YL.Insert(7);
	YL.Insert(6);
	YL.Insert(5);
	YL.Insert(4);
	YL.Print();

	YL = haha;
	YL.Print();
	int a = 0;

	return 0;
}